public class Solution {
    public int preIndex=0;
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        int size=inorder.length;

        return creatTree(preorder,inorder,0,size-1);
    }

    public TreeNode creatTree(int[] preorder,int[] inorder,int iBe,int iEnd){
        if(iBe>iEnd){
            return null;
        }
        TreeNode root=new TreeNode(preorder[preIndex]);
        int rootIndex=findVal(inorder,iBe,iEnd,preorder[preIndex]);
        preIndex++;
        root.left=creatTree(preorder,inorder,iBe,rootIndex-1);
        root.right=creatTree(preorder,inorder,rootIndex+1,iEnd);
        return root;

    }

    public int  findVal(int[] inorder,int iBe,int iEnd,int val){
        int index=iBe;
        while(inorder[index]!=val&&index<=iEnd){
            index++;
        }
        if(index>iEnd){
            return -1;
        }
        return index;
    }

//    public int preIndex=0;//前序遍历的顺序标志
//    public TreeNode buildTree(int[] preorder, int[] inorder) {
//        int usedSize=preorder.length;
//        return create(preorder,inorder,0,usedSize-1);
//    }
//
//    public TreeNode create(int[] preorder, int[] inorder,int iBe,int iEnd){
//        if(iBe>iEnd)return null;
//        TreeNode root=new TreeNode(preorder[preIndex]);
//        int iRoot=find(preorder[preIndex],inorder,iBe,iEnd);
//        preIndex++;
//        root.left=create(preorder,inorder,iBe,iRoot-1);
//        root.right=create(preorder,inorder,iRoot+1,iEnd);
//        return root;
//    }
//
//    public int find(int val,int []inorder,int iBe,int iEnd){
//        for(;iBe<=iEnd;iBe++){
//            if(val==inorder[iBe]){
//                return iBe;
//            }
//        }
//        return -1;
//    }
}
